package com.Shuang.Test3;

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

//1、请你开发一个程序，当小花输入年以及月后，立即显示出该月份的休息日详情
//2、显示出该月份哪些休息日是周六或周日（请依次列出具体的日期和其星期信息）
public class Test {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2022,2,3); //小花首次开始休息的日期
        System.out.println("请小花输入查询的月份（月份必须是2022年2月之后的月份）： ");
        Scanner sc = new Scanner(System.in);
        String sinputDate = sc.next();  //小花输入的要查询的年和月
        LocalDate inputDate = LocalDate.parse(sinputDate + "-01");  //为了解析成功默认在小花输入的年和月后面加一个第一天的日期
        //System.out.println(inputDate);

        //要打印的是小花输入的月份的休息情况，所以要找到这个月的最后一天
        LocalDate inputEndDate = inputDate.plusMonths(1).minusDays(1);  //当前月份加一个月再减一天就是当前月份的最后一天
        //System.out.println(inputEndDate);

        //从首次开始日期 一直算到 要查询的当前月份最后一天的休息情况 --> 将这一天封装成一个对象，包含是否工作与当天日期，再把所有天的对象放到集合中去
        List<Day> days = new ArrayList<>();

        //先把从开始日期到最后一天的所有天算出来放到集合中去
        while (!startDate.isAfter(inputEndDate)){  //日子不在最后一天的后面就一直执行循环，直到日子到达最后一天之后一天停止
            Day day = new Day();
            day.setDate(startDate);
            days.add(day); //把这一天加到集合中去
            startDate = startDate.plusDays(1);  //让起始日子加一天
        }
        System.out.println("全部日子：" + days);

        //开始遍历集合为其中的天数设置哪天休息
        //days = [2-3 2-4 2-5 2-6 2-7 2-8 2-9]
        //        xiu         xiu         xiu
        for (int i = 0; i < days.size(); i++) {
            if (i % 3 == 0){
                Day vacationDay = days.get(i);
                vacationDay.setWork(false);  //这天休息
            }else{
                Day workDay = days.get(i);
                workDay.setWork(true);  //工作
            }
        }
        System.out.print("全部工作、休息情况：");
        for (int i = 0; i < days.size(); i++) {
            Day day = days.get(i);
            System.out.print(day.getDate() + (day.isWork() == true ? "" : "[休息]") + "\t");
        }

        System.out.println("\n------------------------------------------------------------------------");

        //遍历要查询的月份，打印出这月的休息情况
        System.out.print("当月工作、休息情况：");
        for (int i = 0; i < days.size(); i++) {
            Day day = days.get(i);
            if (day.getDate().isAfter(inputDate.minusDays(1))  && (!day.getDate().isAfter(inputEndDate))){
                System.out.print(day.getDate() + (day.isWork() == true ? "" : "[休息]") + "\t");
            }
        }

        System.out.println("\n-------------------------------------------------------------------------");

        System.out.print("当月休息日期情况：");
        for (int i = 0; i < days.size(); i++) {
            Day day = days.get(i);
            if (day.getDate().isAfter(inputDate.minusDays(1))  && (!day.getDate().isAfter(inputEndDate)) && (!day.isWork())) {
                System.out.print(day.getDate() + "[休息]" + "\t");
            }
        }

        System.out.println("\n-------------------------------------------------------------------------");

        //遍历日期找出要查询月份的休息日期，并且找出是周六或者周日的标出来
        System.out.print("当月休息日期是周末的情况：");
        for (int i = 0; i < days.size(); i++) {
            Day day = days.get(i);
            if (day.getDate().isAfter(inputDate.minusDays(1))  && (!day.getDate().isAfter(inputEndDate)) && (!day.isWork())){
//                System.out.print(day.getDate() + "[休息]" + "\t");
                int DayOfWeek = day.getDate().getDayOfWeek().getValue();
                if (DayOfWeek == 6 || DayOfWeek == 7){
                    System.out.print(day.getDate() + "[休息]" + (DayOfWeek == 6 ? "周六" : "周日") + "\t");
                }
            }
        }
    }
}
